package com.are.odisea;

import java.sql.SQLException;

public class ResolverOrden {
	private db conexion = null;
	private String usuario;
	
	public static final int COMMIT_ON = 1;
	public static final int COMMIT_OFF = 0;
	
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public ResolverOrden(db conexion) {
		super();
		this.conexion = conexion;
	}
	
	
	public boolean ResolverOrdenMantenimiento(String orden, String causal,
			String observacion, String ticket, String operador, String cedula,String departamento,String cuadrilla,int commit)
			throws SQLException {
		boolean result = false;
		GestionBandeja gb = new GestionBandeja(this.conexion);
		int bandeja = gb.BandejaLibre(GestionBandeja.ORDEN_MANTENIMIENTO, departamento);
		if (bandeja == -1) {
			throw new SQLException("No hay bandeja disponible");
		}
		
		String sql = "update odsst set odstire=?, odspers=?, odsobse=?, odscole=?, odsoper=?, odsesta='100',odsfert=sysdate(),odscuad=?,odsband=? "
				+ " where odscodi=? and odsesta='4' ";
		java.sql.PreparedStatement pst = conexion.getConnection()
				.prepareStatement(sql);
		pst.setString(1, causal);
		pst.setString(2, cedula);
		pst.setString(3, observacion);
		pst.setString(4, ticket);
		pst.setString(5, operador);
		pst.setString(6, cuadrilla);
		pst.setInt(7, bandeja);
		pst.setString(8, orden);
		if (conexion.Update(pst) > 0) {
			
			BandejaReporte br = new BandejaReporte();
			br.setOrden(orden);
			br.setTipo_orden(GestionBandeja.ORDEN_MANTENIMIENTO);
			br.setPersonal_reporte(cedula);
			br.setUsuario_reporte(usuario);
			br.setBandeja(bandeja);
			if (gb.AddReporte(br,commit)) {  // agregar orden a la bandeja de legalizacion
				if (commit == COMMIT_ON) {
					conexion.Commit();
				}
				result = true;
			}
		}

		return result;
	}
	
	public boolean ResolverOrdenInstalacion(
				String orden, 
				String observacion, 
				String productos,
				String estado,
				String ticket, 
				String operador, 
				String cedula,
				String departamento,
				String cuadrilla,
				int commit)
			throws SQLException {

		boolean result = false;
		GestionBandeja gb = new GestionBandeja(this.conexion);
		int bandeja = gb.BandejaLibre(GestionBandeja.ORDEN_INSTALACION, departamento);
		if (bandeja == -1) {
			throw new SQLException("No hay bandeja disponible");
		}
		
		String sql = "update odsvpi set odsesre=?, odspers=?, odsobse=?, odscole=?, odsoper=?, odsesta='100',odsfert=sysdate(),odscuad=?,odsband=?, odsfain=? "
				+ " where odscodi=? and odsesta='4' ";
		java.sql.PreparedStatement pst = conexion.getConnection()
				.prepareStatement(sql);
		pst.setString(1, estado);
		pst.setString(2, cedula);
		pst.setString(3, observacion);
		pst.setString(4, ticket);
		pst.setString(5, operador);
		pst.setString(6, cuadrilla);
		pst.setInt(7, bandeja);
		pst.setString(8, productos);
		pst.setString(9, orden);
		if (conexion.Update(pst) > 0) {
			
			BandejaReporte br = new BandejaReporte();
			br.setOrden(orden);
			br.setTipo_orden(GestionBandeja.ORDEN_INSTALACION);
			br.setPersonal_reporte(cedula);
			br.setUsuario_reporte(usuario);
			br.setBandeja(bandeja);
			if (gb.AddReporte(br,commit)) {  // agregar orden a la bandeja de legalizacion
				if (commit == COMMIT_ON) {
					conexion.Commit();
				}
				result = true;
			}
		}

		return result;
	}
	
	public boolean ReporteProducto(String orden,String producto, String accion, String causal, int commit) throws SQLException {
		boolean result = false;
		String sql = "insert into reporte_productos (orden,producto,accion,causal,estado) values (?,?,?,?,1)";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, orden);
		pst.setString(2, producto);
		pst.setString(3, accion);
		pst.setString(4, causal);
		if (conexion.Update(pst) > 0) {
			if (commit == COMMIT_ON) {
				conexion.Commit();
			}
			result = true;
		}
		return result;
	}
	

}
